package com.itheima.web;

import com.itheima.pojo.Permission;
import com.itheima.pojo.Role;
import com.itheima.pojo.User;
import com.itheima.service.UserService;
import com.itheima.service.UserServiceImp;

import java.util.HashMap;
import java.util.List;
import java.util.Scanner;

public class OnLineDocApp {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        UserService userService = new UserServiceImp();

        while (true) {
            System.out.println("欢迎来到黑马在线文档！");
            System.out.println("请登入使用功能");
            System.out.println("请输入用户名：");
            String name = sc.nextLine();
            System.out.println("请输入密码：");
            String pwd = sc.nextLine();
            //调用业务层代码
            User loginUser = userService.login(name, pwd);
            if (loginUser != null) {
                //所有的用户信息，角色信息，角色对应的权限信息都在loginUser
                loginSuccess(loginUser);
            } else {
                System.out.println("账号或者密码失败，请重试！");
            }
        }
    }

    /**
     * 登录成功！
     *
     * @param loginUser
     */
    private static void loginSuccess(User loginUser) {
        Scanner sc = new Scanner(System.in);
        //角色拿出来
        List<Role> roles = loginUser.getRoles();
        while (true) {
            System.out.println("--------------------");
            System.out.println("请选择您要使用的角色：");
            //遍历角色集合
            for (int i = 0; i < roles.size(); i++) {
                System.out.println(i + ":" + roles.get(i).getName()); // 索引:角色名称
            }
            //如果有五个角色，i的编号 0,1,2,3,4
            //多加了一个功能，退出功能  编号为 5 = 角色的个数
            System.out.println(roles.size() + ": 退出");

            System.out.println("--------------------");
            //键盘输入要选择的功能
            int index = sc.nextInt();
            if (index == roles.size()) {
                System.out.println("欢迎下次光临！");
                return;
            } else if (index < 0 || index > roles.size()) {
                //索引无效
                System.out.println("选择有误！请重新输入");
            } else {
                //获取用户选取的角色
                Role role = roles.get(index);
                //进入主界面
                homePage(loginUser, role); //传入了当前登录的用户对象，和当前选择的角色
            }
        }
    }

    /**
     * 操作首页
     *
     * @param loginUser
     * @param role
     */
    private static void homePage(User loginUser, Role role) {
        Scanner sc = new Scanner(System.in);
        System.out.println("✴✴✴✴✴✴✴✴✴✴✴✴✴✴✴✴");
        System.out.println("尊敬的" + loginUser.getUsername() + role.getName() + "欢迎登入！");
        System.out.println("✴✴✴✴✴✴✴✴✴✴✴✴✴✴✴✴");
        //权限字典,用来存储不同权限的操作功能.键用权限名，值是操作功能
        HashMap<String, String> dict = new HashMap<>();
        dict.put("新增", "新增文档");
        dict.put("删除", "删除文档");
        dict.put("编辑", "编辑文档");
        dict.put("查询", "查看文档");
        //获取权限，一个角色可以有多个权限
        List<Permission> permissions = role.getPermissions();
        while (true) {
            //根据权限的不同，把不同的功能操作项展示出来
            for (int i = 0; i < permissions.size(); i++) {
                //获取权限
                Permission permission = permissions.get(i);
                //将权限的功能打印出来来
                //dict 字典，包含权限对应的功能
                //permission.getName() 获取权限的名字
                //dict.get(permission.getName())  根据权限的名字获取操作功能项
                System.out.println(i + ":" + dict.get(permission.getName()));
            }
            //返回上一层选项
            System.out.println(permissions.size() + ": 返回");
            System.out.println("请选择你要的操作:");
            int index = sc.nextInt();
            if (index == permissions.size()) {
                System.out.println("欢迎下次光临！");
                return;
            } else if (index < 0 || index > permissions.size()) {
                System.out.println("选择有误！请重新输入");
                System.out.println("----------------");
            } else {
                //当前用户选择的权限
                Permission permission = permissions.get(index);
                //不同权限不同的功能
                switch (permission.getName()) {
                    case "新增":
                        System.out.println("新增文档 ");
                        //功能可以自己拓展
                        break;
                    case "删除":
                        System.out.println("删除文档 ");
                        //功能可以自己拓展
                        break;
                    case "编辑":
                        System.out.println("编辑文档 ");
                        //功能可以自己拓展
                        break;
                    case "查询":
                        System.out.println("查看文档 ");
                        //功能可以自己拓展
                        break;
                }
            }
        }
    }
}
